/*******************************************************************************
 * Copyright 2007-2008 Vidar Svansson
 *
 * This file is part of JAdapter.
 *
 * JAdapter is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * JAdapter is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with JAdapter.  If not, see <http://www.gnu.org/licenses/>.
 *******************************************************************************/

package org.jadapter.func;

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * @author Vidar Svansson
 *
 * @param <T>
 * 
 * @since 0.1
 * 
 */
public abstract class Filter<T> implements Lambda<Boolean,T>{
    
    public T find(Collection<T> collection) {
        for(T t : collection) if(x(t)) return t;
        return null;
    }

    public void remove(Collection<T> c) {
        for (Iterator<T> it = c.iterator(); it.hasNext();)
            if (!x(it.next())) it.remove();
    }  
    
    public Collection<T> select(Collection<T> c) {
        Set<T> s = new HashSet<T>();
        for(T t : c) if (x(t)) s.add(t);
        return s;       
    }

}
